/**
 * Created by LT on 2016/2/24.
 * easyui 擴展
 */

//擴展驗證功能
$.extend($.fn.validatebox.defaults.rules, {
    num : {
        validator : function(value) {
            return /^[1-9]\d*(\.\d+)?$/.test(value);
        },
        message : '只能輸入正數！'
    },
    notNull:{
        validator:function(value){
            return value.trim() !="";
        },
        message:"該輸入項為必輸項"
    },
    maxLength:{
        validator:function(value,params){
            var temp = value.replace(/\\u4E00-\\u9FFF]\g/,"");
             return temp.length + (value.length-temp.length)*3 <= params[0];
            /*debugger;
            return value.length<=params[0];*/
        },
        message:"輸入字符個數不能大於<b style='color:red'>{0}</b>個,一個漢字等於<b style='color:red'>3</b>個字符！"
     /*   message:"輸入字符個數不能大於<b style='color:red'>{0}</b>個！"*/
    },
    numRange:{
		validator:function(value,params){
			debugger;
			var result = false;
			if(params.length==3){
				if(params[2]===0){
					if(value.indexOf(".")!=-1){
						params[2]="只能輸入<b style='color:red'>" + params[0] + "-" + params[1] + "</b>之間的整數!";
						return false;
					}
				}
				params.pop();
			}
			if(params.length==2){
				result = value-0 >=params[0] && value-0<=params[1];
				params.push("輸入數字範圍應該在<b style='color:red'>" + params[0] + "-" + params[1] + "</b>之間!");
			}else if(params.length == 1) {
				result = value-0 <= params[0];
				params.push("");
				params.push("輸入數字不能大於<b style='color:red'>"+ params[0] +"</b>！");
			}else{
				params.push("");
				params.push("");
				params.push("");
				params[2]="驗證規則錯誤！";
			}
			return result;
		},
		message:"{2}"
	},
    invalidChar:{
        validator:function(value) {
            //[`~!#$^&*()=|{}':;',\\[\\].<>/?~！@#￥……&*（）&mdash;—|{}【】‘；：”“'。，、？]
            var pattern = new RegExp("[`~!#$%^&*()=|{}':;',\\[\\]<>/?~！#￥……&*（）—|{}【】‘；：”“'。，、？]");
            return !pattern.test(value);
        },
        message:"不能包含<b style='color:red'>~!#$%￥^&*()=|</b>等特殊字符！"
    },
	number: {    
        validator: function(value,param){
        	if(/^1\d{10}$/.test(value)){
	            return true;
        	}else{
        		return false;
        	}
        },    
        message: '請輸入11位手機號碼'
    },
    minLength: {    
        validator: function(value,param){
        	return value.length == param[0];
        },    
        message: '請輸入{0}位數字'
    }
});

// combo 擴展 clearBtn 屬性顯示清除按鈕
(function ($) {
    var cache = $.fn.combo,
        cacheProperty = $.extend(true, {}, $.fn.combo);

    function hideIcon() {
        cache.apply(this, ['getIcon', 0]).css('visibility',
            'hidden')
    }

    function showIcon() {
        cache.apply(this, ['getIcon', 0]).css('visibility',
            'visible')
    }

    $.fn.combo = function (options, param) {
        if(typeof options === "string"){
            return cache.apply(this, [options, param]);
        }
        options = options || {};
        return $.each(this,function(){
            var result, me = $(this);
            result = cache.apply(me, [options, param]);
                $.each(me,function(){
                    var temp = $.data(this, "combo"),
                        isCreate = false;
                    if (temp&&temp.options&&temp.options.clearBtn) {
                        cache.call($(this),{
                            icons: [{
                                iconCls: 'icon-clear',
                                handler: function () {
                                    cache.call(me, "clear");
                                    if(options.afterClear) {
                                        options.afterClear.call($(this));
                                    }
                                }
                            }],
                            onChange: function () {
                                if (cache.call($(this), "getValue") !== "") {
                                    showIcon.call($(this));
                                } else {
                                    hideIcon.call($(this));
                                }
                            }
                        });
                        isCreate = true;
                    }
                    isCreate && (hideIcon.call($(this)),isCreate=false);
                });
            return result;
        });
    }
    $.extend($.fn.combo, cacheProperty);
    $.extend($.fn.combo.defaults, {clearBtn: false});
})(jQuery);

//解?easyui datebox 不能?月（覆?默?parser）
$.extend($.fn.datebox.defaults,{
    parser:function(value){
        if (!value) return new Date();
        var value = value.split('-');
        var y = parseInt(value[0],10);
        var m = parseInt(value[1],10);
        var d = parseInt(value[2],10);
        if (!isNaN(y) && !isNaN(m)){
            if(isNaN(d)){
                d=1;
            }
            return new Date(y,m-1,d);
        } else {
            return new Date();
        }
    },
	formatter:function(date){
		var y=date.getFullYear();
		var m=date.getMonth()+1;
		var d=date.getDate();
		return y+"/"+(m<10?("0"+m):m)+"/"+(d<10?("0"+d):d);
	}
});

//?展datagrid刷新?前?
$.extend($.fn.datagrid.methods,{
    refreshCurPage:function(grid){
        var page = grid.datagrid('getPager');
        page.pagination("select",page.pageNumber);
    }
});

// datebox 擴展showMonth屬性，只顯示月面板
!(function($){
    var cache= $.fn.datebox,cacheProperty = $.extend(true,{}, $.fn.datebox);
    $.fn.datebox = function(options, param){
        if(typeof options === "string"){
            return cache.apply(this, [options, param]);
        }
        return $.each(this,function(){
            var me = $(this),
                p = undefined, //日期???象
                span = undefined, //?示月份?的触?控件;
                tds = false,//日期???象中月份
                temp = $.extend({}, cacheProperty.parseOptions(me[0]));
            if (temp.showMonth || (options && options.showMonth)) {
                $.extend(temp, {
                    onShowPanel: function () {//?示日????象后再触??出月份?的事件，初始化??有生成月份?
                        p = p||cache.call(me,'panel');
                        span = span||p.find('span.calendar-text');
                        span.trigger('click'); //触?click事件?出月份?
                        if (!tds) setTimeout(function () {//延?触??取月份?象，因?上面的事件触?和?象生成有???隔
                            tds = p.find('div.calendar-menu-month-inner td');
                            tds.click(function (e) {
                                e.stopPropagation(); //禁止冒泡?行easyui?月份?定的事件
                                var year = /\d{4}/.exec(span.html())[0]//得到年份
                                    , month = parseInt($(this).attr('abbr'), 10); //月份
                                cache.call(me, 'hidePanel')//?藏日期?象
                                    .datebox('setValue', year + '-' + month);//?置日期的值
                            });
                        }, 0);
                    },
                    formatter: function (date) {
                        if(date==null || date=="" || date==undefined) {
                            return "";
                        } else {
                            return date.format("yyyy-MM");
                        }
                    }
                });
            }
            return cache.apply(me, [$.extend(temp,options||{}), param]);
        });

    };
    $.extend($.fn.datebox, cacheProperty);
})(jQuery);
